接着上篇唠!Google Guava 配合 List分页工具类进行接口优化改造。
接上篇,你可以在项目初始化或者通过定时任务把从MySQL查询出来的几乎不会改变的大量的数据放到Cache中, 然后配合工具类进行模拟MySQL的分页查询,速度比MySQL快很多
不废话贴代码
/**
* @author bo bo
* @date 2019/12/16 9:23
* @desc list集合工具类
*/
public class ListPagerUtils {
/**
* @param pageSize 当前页面大小
* @param pageIndex 当前页码
* @param list 需要分页的集合
* @return
*/
public static List Pager( int pageIndex, int pageSize, List list) {
//使用list 中的sublist方法分页
List<T> dataList = null;
// 每页显示多少条记录
int currentPage; //当前第几页数据
int totalRecord = list.size(); // 一共多少条记录
int totalPage = totalRecord % pageSize; // 一共多少页
if (totalPage > 0) {
totalPage = totalRecord / pageSize + 1;
} else {
totalPage = totalRecord / pageSize;
}
System.out.println("总页数:" + totalPage);
// 当前第几页数据
currentPage = totalPage < pageIndex ? totalPage : pageIndex;
// 起始索引
int fromIndex = pageSize * (currentPage - 1);
// 结束索引
int toIndex = pageSize * currentPage > totalRecord ? totalRecord : pageSize * currentPage;
try {
dataList = list.subList(fromIndex, toIndex);
} catch (IndexOutOfBoundsException e) {
e.printStackTrace();
}
return dataList;
}
}
实际优化的业务部分代码
//今天的订单
if (type.equals("1")) {
Object cacheOrder = GuavaCacheUtil.get("todayWecharOrder");
if (cacheOrder != null) {
List<WecharOrderVo> orderList = (List<WecharOrderVo>) cacheOrder;
for (WecharOrderVo order : orderList) {
if (order.getTenantId().equals(map.get("tenantId"))) {
neworderList.add(order);
}
}
List pagerList = ListPagerUtils.Pager(format.getIndex(), format.getLimit(), neworderList);
respMap.put("orderList", pagerList);
respMap.put("count", neworderList.size());
}
}
最后来个结果图,效果还不错,几乎速度都是在50ms左右
优化前:线上版本
优化后:没分页
优化后:有分页
当然这可能不是最优优化。也希望你能给我你的建议,一起交流学习